<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 1.JS延迟加载的方式有哪些？（5）
      // defer 属性
      // async属性
      // 把外部引入的js文件放到网页的底部

      // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；
      // ECMAScript是表示ECMA指定的一套标准
      // DOM是表示文本对象模型
      // BOM是浏览器对象模型

      // 3.JavaScript 的数据类型有哪些？
      // 简单数据类型：String Number Boolean Undefined NUll Symbol
      // 复杂数据类型：Object Array Function

      // 4.如何进行数据类型的判断？
      // typeof 用于判断简单数据类型
      // instanceOf
      // Object.prototype.toString.call("将要检测的数据类型")

      // 5.null 和 undefined 的区别？什么时候会得到 undefined？
      // null表示的是一个空的对象
      // undefined表示一个已经命名了但还没有赋值的变量
      // 当变量没有被赋值时，它的值等于undefined
      // 当调用函数没有给参数时，这个参数就是undefined
      // 当函数没有返回值时，默认返回undefined

      // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？
      // null==undefined 因为是==是操作数的对比，他们两的内存空间都没有操作数所以相等，由于内存空间的地址不同所以他们===是false

      // 7.使用 continue 或 break 终止循环时，两种方式的区别是？
      // break是终止当前的循环体
      // continue是跳出本次循环，继续下一个循环

      // 8.如何判断字符串内是否包含指定字符？
      // indexOf() lastIndexOf() include()

      // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；
      // 不改变：concat()连接数组 join()将数组转换为字符串 slice()截取数组里的值 indexOf() lastInsdexOf() include()
      // 会改变：reverse() splice() push() pop() shift() unshift()

      // 10. var、let、const 区别？
      // var定义的变量，没有块的概念，可以跨块访问, 不能跨函数访问,可以变量提升。
      // let定义的变量，只能在块作用域里访问，不能跨块访问，也不能跨函数访问，不可以变量提升。
      // const用来定义常量，使用时必须初始化(即必须赋值)，只能在块作用域里访问，而且不能修改,不可以变量提升。

      // 12. 如何在 DOM2 级事件绑定上传递参数？
      // document.addEventListener("event" ,function(e) {
      //     函数体;
      // })

      // 13. 怎么阻止事件的进一步传播和默认事件？
      // 阻止冒泡事件：event.stopPropagation()
      // 组织默认事件：event.preventDefault()

      // 14. 如何添加一个一次性事件？
      // event.target.addEventListener("click",function(){},{once:true});

      // 15. 同步和异步的区别?
      // 同步：是所有的操作都做完，写入服务器数据库当中才会通知用户执行成功，
      //       这样的话会造成服务器压力过大，而且用户的体验效果也不是很好。
      // 异步：不用等待服务器数据库是否写入，而是先通知用户执行成功，
      //      随后在慢慢的写入服务器数据库，这样会减轻服务器的压力，同时对用户的体验效果很好。

      // 16. AJAX是什么？AJAX是如何为页面注入灵魂？
      // 指向异步网络请求，是一种创建动态网页的技术

      // 17. 开发阶段的 AJAX 跨域有哪些解决方法，jsonp 的原理是什么
      // 通过jsonp，原理是通过script的src属性
      // 正向代理和方向代理

      // 18. 请描述一下cookies，sessionStorage和localStorage的区别
      // cookies的限制大小是4kb 而sessionStorage和localStorage的限制大小是5mb
      // cookies和sessionStorage的过期时间是关闭当前会话就会过期

      // 19. 讲一下常见的异步场景，以及传统异步的诟病和解决方案
      // ajax请求数据的时候是一个异步事件

      // 20. 数组如何实现去重？请提供至少2种方法
      // 使用include()方法查找重复的元素
      // 使用indexOf()方法识别重复的元素
      // 使用splice()去除重复的元素

      // 21. 讲一下对基本数据类型 和 复杂/引用数据类型的理解？
      // 22. this 的指向如何确定？
      // 23. 谈谈对垃圾回收机制的认识
      // 24. 什么是回流重绘，如何进行优化？

      // 25. 请解释什么是事件代理
      // 事件代理的实现原理是利用冒泡和目标元素，
      // 把处理的事件添加到父元素，然后等待子元素事件的冒泡，并且可以通过父元素`event.taget`判断哪个是子元素，从而做出处理

      // 26. 谈谈你对渐进增强和优雅降级的理解(补充)
    </script>
  </body>
</html>
